package com.jay.fault.retry;

import com.jay.spi.SpiLoader;

/**
 * 重试策略工厂类，用于获取重试器对象
 * 本类通过SPI（Service Provider Interface）机制加载和提供重试策略的实现
 */
public class RetryStrategyFactory {

    // 静态代码块，用于加载RetryStrategy的所有实现类
    static {
        SpiLoader.load(RetryStrategy.class);
    }

    /**
     * 默认重试器，使用NoRetryStrategy表示不进行重试
     */
    private static final RetryStrategy DEFAULT_RETRY_STRATEGY = new NoRetryStrategy();

    /**
     * 根据键获取对应的重试策略实例
     *
     * @param key 重试策略的键，用于识别特定的重试策略实现
     * @return 对应键的重试策略实例，如果找不到则返回null或默认重试器
     */
    public static RetryStrategy getInstance(String key) {
        return SpiLoader.getInstance(RetryStrategy.class, key);
    }

}
